from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_client
from django.utils.deconstruct import deconstructible


@deconstructible
class MyStorage(Storage):

    # def __init__(self, option=None):
    #     if not option:
    #         option = settings.CUSTOM_STORAGE_OPTIONS

    # open 打开 打开资源
    # 因为我们的 Fdfs 是通过浏览器来获取资源的
    # http://192.168.229.148:8888/group1/M00/00/02/wKjllFylvO6AFTvPAAGByoOJNyU188.jpg
    # 所以我们不需要打开
    def _open(self, name, mode='rb'):
        pass

    # save 保存 保存资源
    # 自定义 save方法 把图片保存到 Fdfs 服务器上
    def _save(self, name, content, max_length=None):

        #1.创建客户端，加载配置文件
        client = Fdfs_client('utils/fastdfs/client.conf')
        #2.获取图片资源 (读取图片二进制，因为 name 只是图片的名字不是路径)
        # name              图片名
        # content           图片的内容

        data = content.read()


        #3.上传
        # upload_by_buffer 上传二进制
        result = client.upload_by_buffer(data)
        """
        {'Storage IP': '192.168.229.148',
        'Remote file_id': 'group1/M00/00/02/wKjllFylvO6AFTvPAAGByoOJNyU188.jpg',
        'Group name': 'group1',
        'Local file name': '/home/python/Desktop/images/2.jpg',
        'Status': 'Upload successed.',
        'Uploaded size': '96.00KB'}

        """
        #4.根据上传的状态来获取 Remote file_id
        if result.get('Status') == 'Upload successed.':
            return result.get('Remote file_id')
        # 把file_id 返回回去，因为系统要使用

    # exists 存在
    # 返回图片是否存在
    # 我们的 fdfs已经做过图片的重名处理了
    # 所以不需要判断是否存在，尽管上传就可以
    def exists(self, name):

        return False



    def url(self, name):
        # name 其实就是 当时返回的 Remote file_id
        #group1/M00/00/02/wKjllFylxaqAJa_aAAGByoOJNyU682.jpg

        # 默认是返回 name 的
        # 为了让我们访问的方便，我们可以 返回 拼接号的url
        return 'http://192.168.119.143:8888/' + name
